using System;

namespace SortDemo
{
    /// <summary>
    /// 整数数组冒泡排序工具类
    /// </summary>
    public class BubbleSorter
    {
        // 排序状态标记
        private bool _isSorted;

        /// <summary>
        /// 执行冒泡排序（升序）
        /// </summary>
        /// <param name="array">待排序的整数数组</param>
        public void Sort(int[] array)
        {
            _isSorted = false; // 重置排序状态

            // 校验输入
            if (array == null || array.Length <= 1)
            {
                _isSorted = true;
                return;
            }

            int n = array.Length;

            // 外层循环：控制排序轮次
            for (int i = 0; i < n - 1; i++)
            {
                bool swapped = false;

                // 内层循环：比较相邻元素
                for (int j = 0; j < n - i - 1; j++)
                {
                    if (array[j] > array[j + 1])
                    {
                        // 交换元素
                        int temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
                        swapped = true;
                    }
                }

                // 无交换则提前退出
                if (!swapped)
                    break;
            }

            _isSorted = true;
        }

        /// <summary>
        /// 打印数组内容
        /// </summary>
        /// <param name="array">要打印的数组</param>
        /// <param name="message">前缀信息</param>
        public void PrintArray(int[] array, string message = "")
        {
            if (array == null)
            {
                Console.WriteLine("数组为空");
                return;
            }

            if (!string.IsNullOrEmpty(message))
                Console.Write($"{message}: ");

            // 用空格分隔元素
            foreach (int num in array)
            {
                Console.Write(num + " ");
            }
            Console.WriteLine();
        }

        /// <summary>
        /// 获取排序状态
        /// </summary>
        public bool IsSorted()
        {
            return _isSorted;
        }
    }
}